"""使用Pandas筛选Excel中符合特定条件的数据"""
import pandas as pd

### 1.2.2筛选符合特定条件的数据
# 设置列对齐
pd.set_option('display.unicode.ambiguous_as_wide', True)
pd.set_option('display.unicode.east_asian_width', True)

# 读取全部数据，使用默认索引
df = pd.read_excel(r'resources\超市营业额2.xlsx')

print('下标在[5,10]区间的的行'.center(20, '='))
# 对行进行切片，注意切片是限定的左闭右开区间
print(df[5:11])

## iloc使用数字做索引
print('索引为5的行'.center(20, '='))
print(df.iloc[5])

print('下标为[3,5,10]的行'.center(20, '='))
print(df.iloc[[3, 5, 10], :])

print('行下标为[3,5,10]，列下标为[0,1,4]'.center(30, '='))
print(df.iloc[[3, 5, 10], [0, 1, 4]])

print('查看指定的列前5行数据'.center(20, '='))
print(df[['姓名', '时段', '交易额']][:5])

print('只查看前10行指定的列'.center(20, '='))
print(df[: 10][['姓名', '日期', '柜台']])

## loc和at使用标签文本做索引
print('下标为[3,5,10]的行的指定列'.center(20, '='))
print(df.loc[[3, 5, 10], ['姓名', '交易额']])

print('行下标为3,姓名列的值'.center(20, '='))
print(df.at[3, '姓名'])

print('交易额高于1700元的数据'.center(20, '='))
print(df[df['交易额'] > 1700])

print('交易总额'.center(20, '='))
print(df['交易额'].sum())

print('下午班的交易总额'.center(20, '='))
print(df[df['时段'] == '14：00-21：00']['交易额'].sum())

print('张三下午班的交易情况'.center(20, '='))
print(df[(df.姓名 == '张三') & (df.时段 == '14：00-21：00')][:10])

print('日用品柜台销售总额'.center(20, '='))
print(df[df['柜台'] == '日用品']['交易额'].sum())

print('张三和李四二人销售总额'.center(20, '='))
print(df[df['姓名'].isin(['张三', '李四'])]['交易额'].sum())

print('交易额在指定范围内的记录'.center(20, '='))
print(df[df['交易额'].between(800, 850)])


### 1.2.2查看数据特征和统计信息
print('查看交易额统计信息'.center(20, '='))
print(df['交易额'].describe())

print('交易额四分位数'.center(20, '='))
print(df['交易额'].quantile([0, 0.25, 0.5, 0.75, 1.0]))

print('交易额中值'.center(20, '='))
print(df['交易额'].median())

print('交易额最小的三条记录'.center(20, '='))
print(df.nsmallest(3, '交易额'))

print('交易额最大的5条记录'.center(20, '='))
print(df.nlargest(5, '交易额'))

print('最后一个日期'.center(20, '='))
print(df['日期'].max())

print('最小的工号'.center(20, '='))
print(df['工号'].min())

print('第一个最小交易额的行下标'.center(20, '='))
min_index = df['交易额'].idxmin()
print(min_index)

print('第一个最小交易额'.center(20, '='))
print(df.loc[min_index, '交易额'])

print('第一个最大交易额的行下标'.center(20, '='))
max_index = df['交易额'].idxmax()
print(max_index)

print('第一个最大交易额'.center(20, '='))
print(df.loc[max_index, '交易额'])
